//
//  HMStatusPictureView.swift
//  iOSWeibo12
//
//  Created by Admin on 16/9/11.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

/// cell 的间距
let HMStatusPictureViewItemMargin: CGFloat = 4
/// 最大列数
private let maxColumn = 3
/// cell 的宽高 = (屏幕的宽度 - 左边的间距 - 右边的间距 - 2 * item之间的间距) / 列数
let HMStatusPictureViewItemWH: CGFloat = (UIScreen.width - 2 * HMStatusCellMargin - (2 * HMStatusPictureViewItemMargin)) / 3

/// 微博配图视图,显示9张图片
class HMStatusPictureView: UIView {

    /// 配图自身的宽度约束
    @IBOutlet weak var widthCons: NSLayoutConstraint!
    
    /// 配图自身的高度约束
    @IBOutlet weak var heightCons: NSLayoutConstraint!
    
    /// 微博配图
    var pictureURLs: [URL]? {
        didSet {
            debugLabel.text = "图片数量 = \(pictureURLs?.count ?? 0)"
            
            // 要显示图片的数量
            let count = pictureURLs?.count ?? 0
            layoutImageViews(count: count)
            
            let size = calcPictureViewSize(count: count)
            widthCons.constant = size.width
            heightCons.constant = size.height
        }
    }
    
    // MARK: - 属性
    // 存放9个imageView
    private var imageViews = [UIImageView]()
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        
        setupUI()
    }
    
    /// 配图视图添加9张图片
    private func setupUI() {
        // 添加9个imageView
        for _ in 0..<9 {
            // 创建imageView
            let imageView = UIImageView()
            imageView.backgroundColor = UIColor.random
            imageView.contentMode = UIViewContentMode.scaleAspectFill
            imageView.clipsToBounds = true
            
            self.addSubview(imageView)
            // 添加到imageViews的数组里面,方便后续操作
            imageViews.append(imageView)
        }
        
        // 添加测试的label
        addSubview(debugLabel)
    }
    
    
    /// 布局9个图片的位置
    ///
    /// - parameter count: 要显示图片的数量
    private func layoutImageViews(count: Int) {
        
        /// 默认3列
        var numberOfColumn = 3
        if count == 1 {
            // 只有一个图片,显示1列
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            // 2个或4个图片显示2列
            numberOfColumn = 2
        }
        
        // 遍历每一个imageView,设置frame
        for (index, imageView) in imageViews.enumerated() {
            if index >= count {
                // 隐藏起来
                imageView.isHidden = true
            } else {
                // 显示出来
                imageView.isHidden = false
                
                // 计算每个imageView在哪列
                let column = index % numberOfColumn
                
                // 计算每个imageView在哪行
                let row = index / numberOfColumn
                
                // 计算x
                let x = CGFloat(column) * (HMStatusPictureViewItemWH + HMStatusPictureViewItemMargin)
                
                // 计算y
                let y = HMStatusCellMargin + CGFloat(row) * (HMStatusPictureViewItemWH + HMStatusPictureViewItemMargin)
                
                // 设置imageView的fame
                imageView.frame = CGRect(x: x, y: y, width: HMStatusPictureViewItemWH, height: HMStatusPictureViewItemWH)
                
                let url = pictureURLs![index]
                imageView.sd_setImage(with: url)
            }
        }
    }
    
    /// 计算配图的总宽和高
    ///
    /// - parameter count: 图片的数量
    ///
    /// - returns: 配图的总宽和高
    private func calcPictureViewSize(count: Int) -> CGSize {
        // 根据 图片数量 计算配图的总大小
        if count == 0 {
            return CGSize.zero
        }
        
        /// 默认3列
        var numberOfColumn = 3
        if count == 1 {
            // 只有一个图片,显示1列
            numberOfColumn = 1
        } else if count == 2 || count == 4 {
            // 2个或4个图片显示2列
            numberOfColumn = 2
        }
        
        // 计算宽度 = 总列数 * 图片的宽度 + (总列数 - 1) * 图片间距
        let width = CGFloat(numberOfColumn) * HMStatusPictureViewItemWH + (CGFloat(numberOfColumn) - 1) * HMStatusPictureViewItemMargin
        
        // 2 = (6 + 3 - 1) / 3
        // 3 = (9 + 3 - 1) / 3
        // 1 = (3 + 3 - 1) / 3
        // 总行数 = (总数 + 总列数 - 1) / 总列数, 前提保证都是整数
        let numberOfRow = (count + numberOfColumn - 1) / numberOfColumn
        
        // 计算高度 = 顶部间距 + 总行数 * 图片高度 + (总行数 - 1) * 图片的间距
        let height = HMStatusCellMargin + CGFloat(numberOfRow) * HMStatusPictureViewItemWH + (CGFloat(numberOfRow) - 1) * HMStatusPictureViewItemMargin
        
        return CGSize(width: width, height: height)
    }
    
    //MARK: - 懒加载
    private lazy var debugLabel: UILabel = {
        let label = UILabel()
        
        label.font = UIFont.systemFont(ofSize: 20)
        label.textColor = UIColor.black
        label.text = "我还没有图片"
        label.frame = CGRect(x: 20, y: 20, width: 200, height: 100)
        
        return label
    }()
}
